/*
 * Copyright 2017-8-30 13:56:25 The JA-SIG Collaborative. All rights reserved.
 * distributed with thi file and available online at
 */
package com.lap.scp.admin.dal;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.lap.scd.commons.page.Page;
import com.lap.scp.admin.domain.UserDO;
import com.lap.scp.admin.query.UserQueryDO;

/**
 * <pre>
 * 用户操作持久对象
 * </pre>
 * 
 * @author 系统自动生成 Exp
 * @Date 2017-8-30 13:56:25
 * @since 1.0
 */
@Mapper
public interface UserDAO {
	/**
	 * 统计查询数据总数量
	 * 
	 * @param queryDO
	 * @return 数量
	 */
	int countPage(@Param("userQueryDO") UserQueryDO queryDO);

	/**
	 * 根据ID删除数据信息
	 * 
	 * @param userId
	 * @return 改变数量
	 */
	int deleteById(int userId);

	/**
	 * 新增
	 *
	 * @param userDO
	 */
	void insertUser(UserDO userDO);

	/**
	 * 根据ID查询数据信息
	 *
	 * @param userId
	 * @return UserDO
	 */
	UserDO queryById(int userId);

	/**
	 * 分页查询数据信息
	 *
	 * @param page
	 * @param queryDO
	 * @return 数据集合
	 */
	List<UserDO> queryPage(@Param("page") Page page, @Param("userQueryDO") UserQueryDO queryDO);

	/**
	 * 根据ID修改
	 *
	 * @param userId
	 * @param status
	 * @param lastUpdateBy
	 * @return
	 */
	int updateUser(UserDO userDO);

	/**
	 * 根据管理员ID查询关联表的角色ID，这里主操作方是管理员，所以关系表都是这里操作
	 * 
	 * @param userId
	 * @return
	 */
	List<Integer> queryRoleIdById(int userId);

	/**
	 * 根据管理员ID删除管理员和角色关系表的信息
	 * 
	 * @param userId
	 * @return
	 */
	int deleteRoleById(int userId);

	/**
	 * 根据管理员登录名获取管理员信息
	 * 
	 * @param username
	 * @return
	 */
	UserDO queryByUsername(String username);

	/**
	 * 修改管理员状态，这里仅根据管理员ID 更新管理员状态，最后修改人，最后修改时间
	 * 
	 * @param userDO
	 * @return
	 */
	int updateStatus(@Param("userId") int userId, @Param("status") int status,
			@Param("updatedBy") String updatedBy);

	/**
	 * 修改密码
	 * 
	 * @param userId
	 * @param newPd
	 * @param updatedBy
	 * @return
	 */
	int updatePasswd(@Param("userId") int userId, @Param("newPd") String newPd,
			@Param("updatedBy") String updatedBy);

}
